<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>
          Google Web Toolkit
          
            -
            Creating Services</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<link href="../css/base.css" rel="stylesheet" type="text/css">
<link href="./doc.css" rel="stylesheet" type="text/css">
<link href="../css/print.css" rel="stylesheet" media="print" type="text/css">
</head>
<body>
<div id="gaia">&nbsp;</div>
<div id="header">
<div id="logo">
<a href="http://code.google.com/"><img src="http://code.google.com/images/code_sm.png" alt="Google"></a>
</div>
<div id="title">Google Web Toolkit (Beta)</div>
<div id="breadcrumbs">
<div id="nextprev">
<nobr><a href="com.google.gwt.doc.DeveloperGuide.RemoteProcedureCalls.PlumbingDiagram.html">&laquo; prev</a></nobr><nobr><a href="com.google.gwt.doc.DeveloperGuide.RemoteProcedureCalls.ImplementingServices.html">next &raquo;</a></nobr>
</div>
<span class="item"><a href="http://code.google.com/">Google Code Home</a></span>
        &gt;
        <span class="item"><a href="http://code.google.com/webtoolkit/">Google Web Toolkit</a></span>
        &gt;
        
        <span class="item"><a xmlns="" href="com.google.gwt.doc.DeveloperGuide.html">Developer Guide</a></span> &gt;
						<span class="item"><a href="com.google.gwt.doc.DeveloperGuide.RemoteProcedureCalls.html">Remote Procedure Calls</a></span> &gt;
						<span class="selected item">Creating Services</span>
</div>
</div>
<div id="side">
<div id="menu">
<h4>
<a href="http://code.google.com/webtoolkit/">Google Web Toolkit</a>
</h4>
<ul>
<li>
<a href="http://code.google.com/webtoolkit/download.html">Download GWT</a>
</li>
</ul>
<ul>
<li>
<a href="http://code.google.com/webtoolkit/overview.html">Product Overview</a>
</li>
<li>
<a href="http://code.google.com/webtoolkit/gettingstarted.html">Getting Started Guide</a>
</li>
<li>
<a href="http://code.google.com/webtoolkit/documentation/examples/">Example Projects</a>
</li>
</ul>
<ul>
<li>
<a class="selected" href="./com.google.gwt.doc.DeveloperGuide.html">Developer Guide</a>
</li>
<li>
<a href="./gwt.html">Class Reference</a>
</li>
<li>
<a href="http://code.google.com/webtoolkit/issues/">Issue Tracking</a>
</li>
<li>
<a href="http://groups.google.com/group/Google-Web-Toolkit">Developer Forum</a>
</li>
</ul>
<ul>
<li>
<a href="http://googlewebtoolkit.blogspot.com/">GWT Blog</a>
</li>
<li>
<a href="http://code.google.com/webtoolkit/faq.html">GWT FAQ</a>
</li>
<li>
<a href="http://code.google.com/webtoolkit/makinggwtbetter.html">Making GWT Better</a>
</li>
</ul>
<ul>
<li>
<a href="http://code.google.com/webtoolkit/thirdparty.html">Third Party Tools</a>
</li>
</ul>
</div>
<div id="search">
<form action="http://www.google.com/search" method="get">
<div>
<input name="domains" value="code.google.com" type="hidden"><input name="sitesearch" value="code.google.com" type="hidden">
<div class="header">Search this site:</div>
<div class="input">
<input name="q" size="10">
</div>
<div class="button">
<input value="Search" type="submit">
</div>
</div>
</form>
</div>
</div>
<div xmlns="http://www.w3.org/1999/xhtml" id="body">
<h1>Creating Services</h1>To develop a new service interface, begin by creating a
 <a xmlns="" href="com.google.gwt.doc.DeveloperGuide.Fundamentals.ClientSide.html">client-side</a> Java interface
 that extends the <a href="com.google.gwt.user.client.rpc.RemoteService.html">RemoteService</a> tag
 interface.
 
 <pre class="code">public interface MyService extends RemoteService {
  public String myMethod(String s);
}
</pre>

 
 This synchronous interface is the definitive version of your service's
 specification. Any implementation of this service on the
 <a href="com.google.gwt.doc.DeveloperGuide.Fundamentals.ServerSide.html">server-side</a> must extend
 <a href="com.google.gwt.user.server.rpc.RemoteServiceServlet.html">RemoteServiceServlet</a> and implement this service interface.
 
 <pre class="code">public class MyServiceImpl extends RemoteServiceServlet implements
    MyService {

  public String myMethod(String s) {
    // Do something interesting with 's' here on the server.
    return s;
  }

}
</pre>
<h2>Asynchronous Interfaces</h2>
 
 Before you can actually attempt to make a remote call from the client,
 you must create another interface, an asynchronous one, based on your
 original service interface. Continuing with the example above...
 
 <pre class="code">interface MyServiceAsync {
  public void myMethod(String s, AsyncCallback callback);
}
</pre>
<p>
 The nature of asynchronous method calls requires the caller to pass in a
 callback object that can be notified when an asynchronous call completes,
 since by definition the caller cannot be blocked until the call
 completes. For the same reason, asynchronous methods do not have return
 types; they must always return void. After an asynchronous call is made,
 all communication back to the caller is via the passed-in callback
 object.
 </p>
 
 The relationship between a service interface and its asynchronous
 counterpart is straightforward:
 <ul>
<li>If a service interface is called
 <code>com.example.cal.client.SpellingService</code>, then the
 asynchronous interface must be called
 <code>com.example.cal.client.SpellingServiceAsync</code>. The
 asynchronous interface must be in the same package and have the same
 name, but with the suffix <code>Async</code>.</li>
<li>For each method in your service interface,
 
 <pre class="code">public ReturnType methodName(ParamType1 param1, ParamType2 param2);
</pre>

 
 an asynchronous sibling method should be defined that looks like this:
 
 <pre class="code">public void methodName(ParamType1 param1, ParamType2 param2,
    AsyncCallback callback);
</pre>
</li>
</ul>
 
 See <a href="com.google.gwt.user.client.rpc.AsyncCallback.html">AsyncCallback</a> for additional details on how to implement an
 asynchronous callback.</div>
<div id="footer" xmlns="http://www.w3.org/1999/xhtml">
          &copy;2007 Google
          <span class="noprint">
            -
            <a href="http://www.google.com/">Google Home</a>
            -
            <a href="http://www.google.com/jobs/">We're Hiring</a>
            -
            <a href="http://www.google.com/privacy.html">Privacy Policy</a>
            -
            <a href="http://www.google.com/terms_of_service.html">Terms of Service</a>
            -
            <a href="mailto:code@google.com">Contact Us</a></span>
<div id="license" style="text-align: center; margin: 1em 0em 1em 0em">
            Except as otherwise
            <a href="http://code.google.com/policies.html#restrictions">noted</a>, the content of this  page is licensed under the  <a rel="license" href="http://creativecommons.org/licenses/by/2.5/">Creative Commons Attribution 2.5 License</a>.
              <!--
            <rdf:RDF xmlns="http://web.resource.org/cc/">
<Work rdf:about="">
<license rdf:resource="http://creativecommons.org/licenses/by/2.5/"></license>
</Work>
<License rdf:about="http://creativecommons.org/licenses/by/2.5/">
<permits rdf:resource="http://web.resource.org/cc/Reproduction"></permits>
<permits rdf:resource="http://web.resource.org/cc/Distribution"></permits>
<requires rdf:resource="http://web.resource.org/cc/Notice"></requires>
<requires rdf:resource="http://web.resource.org/cc/Attribution"></requires>
<permits rdf:resource="http://web.resource.org/cc/DerivativeWorks"></permits>
</License>
</rdf:RDF>
              -->
            </div>
</div>
<script src="https://ssl.google-analytics.com/urchin.js" type="text/javascript" xmlns="http://www.w3.org/1999/xhtml"></script><script type="text/javascript">
          _uacct="UA-18071-1"; _uanchor=1; urchinTracker();
        </script>
</body>
</html>
